IF EXISTS(SELECT * FROM sysobjects WHERE name = 'validarInterseccionGeomecanica' AND type = 'P')
BEGIN
	DROP PROCEDURE validarInterseccionGeomecanica
END
GO
CREATE PROCEDURE validarInterseccionGeomecanica
(
@CodigoSondaje 		INT,
@CodigoGeomecanica 	INT,
@Desde	FLOAT,
@Hasta	FLOAT,
@Result	INT OUT
)
AS
/*********************************************************************
	Resumen: Devuelve lista de Litologia
	Parametros:
		@CodigoSondaje : Codigo de Sondaje
		@Desde : Valor inicial a validar
		@Hasta : Valor final a validar
		@Result : Resultado 1 = Error, 0 = Exito
**********************************************************************/	
SET NOCOUNT on
BEGIN
	DECLARE @Geomecanica TABLE
	(
	CodigoGeomecanica INT,
	Desde FLOAT,
	Hasta FLOAT
	)
	
	INSERT INTO @Geomecanica(CodigoGeomecanica, Desde, Hasta)
	SELECT CodigoGeomecanica, Desde, Hasta FROM Geomecanica t1 WITH(NOLOCK) WHERE t1.CodigoSondaje = @CodigoSondaje
	
	IF (@CodigoGeomecanica = 0)
		BEGIN	   
			IF (@Hasta > 0)
				BEGIN		
					SELECT @CodigoGeomecanica = CONVERT(INT, ISNULL(MAX(t1.CodigoGeomecanica), 0)) + 1 FROM Geomecanica t1 WITH(NOLOCK) WHERE t1.CodigoSondaje = @CodigoSondaje -- AND t1.CodigoGeomecanica <> @CodigoGeomecanica
					INSERT INTO @Geomecanica(CodigoGeomecanica, Desde, Hasta)
					VALUES (@CodigoGeomecanica, @Desde, @Hasta)
				END
		END
	ELSE
		BEGIN
			UPDATE @Geomecanica SET Desde = @Desde, Hasta = @Hasta WHERE CodigoGeomecanica = @CodigoGeomecanica
		END		
	
	
	SET @Result = 0
	DECLARE @CodigoAnterior	VARCHAR(3)
	DECLARE @Espacio FLOAT
	DECLARE @EspacioAnterior FLOAT
	
	DECLARE @Geomecanica1 TABLE
	(
	Orden INT IDENTITY,
	CodigoGeomecanica INT,
	Desde FLOAT,
	Hasta FLOAT
	)		
	
	INSERT INTO @Geomecanica1(CodigoGeomecanica, Desde, Hasta)			
	SELECT CodigoGeomecanica, Desde, Hasta FROM @Geomecanica ORDER BY Desde ASC, Hasta ASC    
		
	SELECT TOP 1 @CodigoAnterior = CodigoGeomecanica, @EspacioAnterior = isnull(Desde, 0) 
	FROM @Geomecanica1 ORDER BY Orden ASC
	
	-- Valida Interseccion de segmetos
	DECLARE curGeomecanica CURSOR FOR
	SELECT Orden, CodigoGeomecanica, isnull(Desde, 0) AS Espacio FROM @Geomecanica1
	UNION 
	SELECT Orden, CodigoGeomecanica, isnull(Hasta, 0) AS Espacio FROM @Geomecanica1
	ORDER BY 1

	DECLARE @Orden INT
	
	OPEN curGeomecanica
	FETCH NEXT FROM curGeomecanica INTO @Orden, @CodigoGeomecanica, @Espacio								
	WHILE (@@FETCH_STATUS=0)
	BEGIN
		   	
		IF (@CodigoAnterior <> @CodigoGeomecanica)
			BEGIN
				IF (@Espacio - @EspacioAnterior) <> 0
					BEGIN
						-- Se marca como inconstencia a ambos registros
				   		SET @Result = 1
						CLOSE curGeomecanica
						DEALLOCATE curGeomecanica	 
						GOTO Terminar		   		
					END							
			END 
		
		SET @CodigoAnterior = @CodigoGeomecanica 
		SET @EspacioAnterior = @Espacio
		FETCH NEXT FROM curGeomecanica INTO @Orden, @CodigoGeomecanica, @Espacio
	END
	CLOSE curGeomecanica
	DEALLOCATE curGeomecanica
	  
Terminar:
	PRINT str(@Result)
	SELECT @Result AS Result
	
END -- validarInterseccion 4, 1, 12, 34, 0

